package com.tsy.server.manage.service;

import com.tsy.server.manage.model.dto.DeviceDTO;
import com.tsy.server.manage.model.dto.DevicePayloadDTO;
import com.tsy.server.manage.model.dto.DevicePayloadReceiver;
import com.dji.sdk.cloudapi.device.PayloadFirmwareVersion;

import java.util.Collection;
import java.util.List;

/**
 * @author sean.zhou
 * @date 2021/11/19
 * @version 0.1
 */
public interface IDevicePayloadService {

    /**
     * 根据载荷序列号查询该载荷是否已保存。
     * @param payloadSn 载荷序列号
     * @return
     */
    Integer checkPayloadExist(String payloadSn);

    /**
     * 保存所有载荷数据。
     * @param payloadReceiverList 载荷接收数据列表
     * @return
     */
    Boolean savePayloadDTOs(DeviceDTO drone, List<DevicePayloadReceiver> payloadReceiverList);

    /**
     * 保存单个载荷数据。
     * @param payloadReceiver 载荷接收数据
     * @return
     */
    Integer saveOnePayloadDTO(DevicePayloadReceiver payloadReceiver);

    /**
     * 根据设备序列号查询该设备的所有载荷数据。
     * @param deviceSn 设备序列号
     * @return
     */
    List<DevicePayloadDTO> getDevicePayloadEntitiesByDeviceSn(String deviceSn);

    /**
     * 根据设备序列号集合删除这些设备上的全部载荷数据。
     * @param deviceSns 设备序列号集合
     */
    void deletePayloadsByDeviceSn(List<String> deviceSns);

    /**
     * 更新载荷的固件版本信息。
     * @param receiver 固件版本上报
     */
    Boolean updateFirmwareVersion(String droneSn, PayloadFirmwareVersion receiver);

    /**
     * 根据载荷序列号集合删除载荷数据。
     * @param payloadSns 载荷序列号集合
     */
    void deletePayloadsByPayloadsSn(Collection<String> payloadSns);

    /**
     * 检查设备是否具备载荷控制权限。
     * @param deviceSn 设备序列号
     * @param payloadIndex 载荷索引
     * @return
     */
    Boolean checkAuthorityPayload(String deviceSn, String payloadIndex);

    void updatePayloadControl(DeviceDTO drone, List<DevicePayloadReceiver> payloads);
}